JavaScript - search streetnames

Revision:


Content


Using RegExp to search street names

Using RegExp (Regular Expressions) to search for street names can be tricky because street names vary widely in format, but you can create patterns to match common structures.

match full street address (basic)

code:
            <script>
                const pattern = /\d+\s+\w+\s+(?:Street|St|Avenue|Ave|Road|Rd|Boulevard|Blvd|Lane|Ln|Drive|Dr)/i;
                const text = "123 Main Street";
                console.log(pattern.test(text)); // true
            </script>
        

Where:

\d+→ house number

\s+→ one or more spaces

\w+street name (assumes single word)

(?:...) → non-capturing group for street types

i flagcase-insensitive

capture just the street name

code:
            <div>
                <p id="name"></p>
            </div>
            <style>
                #name{margin-left: 2vw; }
            </style>
            <script>
                const text1 = "456 Oak Avenue";
                const match = text1.match(/\d+\s+([A-Za-z\s.]+?)\s+(?:Street|St|Ave|Avenue|Rd|Road|Blvd|Boulevard|Ln|Lane|Dr|Drive)/i);
                if (match) {
                console.log(match[1].trim()); // "Oak"
                document.getElementById("name").innerText = `Extracted street name from "${text1}": ${match[1].trim()}`;
                }
            </script>
        

more complex street name capture

code:
            <div>
                <p id="name1"></p>
            </div>
            <style>
                #name1{margin-left: 2vw; }
            </style>
            <script>
                // More robust pattern
                const pattern_A = /\d+\s+([A-Za-z0-9\s.'-]+?)\s+(?:Street|St\.?|Avenue|Ave\.?|Road|Rd\.?|Boulevard|
                Blvd\.?|Lane|Ln\.?|Drive|Dr\.?|Way|Court|Ct\.?|Circle|Cir\.?)/i;

                const examples = [
                "123 Martin Luther King Jr. Blvd",
                "456 O'Malley Road",
                "789 West 42nd St.",
                "1001 De la Cruz Ave"
                ];

                examples.forEach(addr => {
                const match = addr.match(pattern_A);
                if (match) {
                    console.log(`Street name: "${match[1].trim()}"`);
                    document.getElementById("name1").innerText += `street name from "${addr}": ${match[1].trim()}\n`;
                }
                });
            </script>
        

select pictures based on street names

To select pictures in a gallery based on street names, you typically need to associate each image with metadata (like a street name), then filter or query those images using that metadata. Here’s how you can do it in practice using HTML, JavaScript, and data attributes (or other metadata sources):

store street names with each image

Use HTML data-* attributes, JavaScript objects, or a data source (e.g., JSON) to link each image to its street name.

code:
            <div>
                <div class="gallery">
                    <img src="../../images/10.jpg" data-street="Main Street" alt="Main Street">
                    <img src="../../images/11.jpg" data-street="Oak Avenue" alt="Oak Avenue">
                    <img src="../../images/12.jpg" data-street="Pine Road" alt="Pine Road">
                    <img src="../../images/13a.jpg" data-street="Elm Street" alt="Elm Street">
                </div>
                <input type="text" id="streetSearch" placeholder="Search by street name" >
            </div>
            <style>
                .gallery{position: relative;display: grid;  grid-template-columns: repeat(4, 1fr); 
                    width: 99vw; margin: 0.5vw; }
                .gallery img {width: 20vw; height: 15vw; display: block; margin-bottom: 1vw; 
                    object-fit: cover; object-position: 0.2vw 0.2vw; } 
                #streetSearch {margin-top: 10px; padding: 5px; width: 200px;}   
            </style>
            <script>
            document.getElementById('streetSearch').addEventListener('input', function(e) {
                    const query = e.target.value.trim();
                    const images = document.querySelectorAll('.gallery img');
                    // Build a case-insensitive regex (escape special characters for safety)
                    const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
                    const regex = new RegExp(escapedQuery, 'i');

                    images.forEach(img => {
                        const street = img.dataset.street || '';
                        if (query === '' || regex.test(street)) {
                            img.style.display = 'block'; // or 'inline-block', etc.
                        } else {
                        img.style.display = 'none';
                        }
                    });
                });
            </script>
        

search a picture gallery with JavaScript

code:
          <div>
            <input type="text" id="searchInput" placeholder="Search by street name..." />
            <div class="gallery_1" id="gallery_1">
                
            </div>
          </div>
        <style>
            .gallery_1 { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
            .image-item { flex: 0 0 150px; text-align: center; }
            .image-item img { width: 100%; height: auto; }
            .image-item .street { font-size: 0.9em; color: #555; }
          </style>
          <script>
              // Your image data: array of objects with URL and street name
              const images = [
                { url: '../../images/10.jpg', street: 'Maple Avenue' },
                { url: '../../images/11.jpg', street: 'Oak Street' },
                { url: '../../images/12.jpg', street: 'Pine Road' },
                { url: '../../images/13a.jpg', street: 'Elm Boulevard' },
                { url: '../../images/14a.jpg', street: 'Cedar Lane' }
                // Add more as needed
              ];

              const galleryEl = document.getElementById('gallery_1');
              const searchInput = document.getElementById('searchInput');

              // Render all images initially
              function renderImages(imgList) {
                galleryEl.innerHTML = '';
                imgList.forEach(img => {
                  const div = document.createElement('div');
                  div.className = 'image-item';
                  div.innerHTML = `
                    <img src="${img.url}" alt="${img.street}">
                    <div class="street">${img.street}</div>
                  `;
                  galleryEl.appendChild(div);
                });
              }

              // Initial render
              renderImages(images);

              // Add search listener
              searchInput.addEventListener('input', (e) => {
                const query = e.target.value.trim().toLowerCase();
                if (query === '') {
                  renderImages(images);
                } else {
                  const filtered = images.filter(img =>
                    img.street.toLowerCase().includes(query)
                  );
                  renderImages(filtered);
                }
              });
          </script>
      

search a static HTML file

          <div>
              <input type="text" id="searchInput_a" placeholder="Type a street name to search..." autocomplete="off" />
              <div class="gallery_a" id="gallery_a">
                  <!-- Each image item includes its street name -->
                  <div class="image-item_a" data-street="Maple Avenue">
                    <img src="../../images/10.jpg" alt="Maple Avenue" />
                    <div class="street-name">Maple Avenue</div>
                  </div>

                  <div class="image-item_a" data-street="Oak Street">
                    <img src="../../images/11.jpg" alt="Oak Street" />
                    <div class="street-name">Oak Street</div>
                  </div>

                  <div class="image-item_a" data-street="Pine Road">
                    <img src="../../images/12.jpg" alt="Pine Road" />
                    <div class="street-name">Pine Road</div>
                  </div>

                  <div class="image-item_a" data-street="Elm Boulevard">
                    <img src="../../images/13a.jpg" alt="Elm Boulevard" />
                    <div class="street-name">Elm Boulevard</div>
                  </div>
                  <!-- Add more as needed -->
              </div>
          </div>
          <style>
              #searchInput_a {width: 100%; padding: 0.8vw;  margin-bottom: 1.2vw; font-size: 1vw;box-sizing: border-box; }   
              .gallery_a { display: flex; flex-wrap: wrap; gap: 1vw; }
              .image-item_a {flex: 0 0 calc(33% - 1vw); text-align: center; border: 1px solid #eee;
                 border-radius: 0.3vw; padding: 0.6vw; box-sizing: border-box; }
              .image-item img { max-width: 100%; height: auto; border-radius: 0.1vw;}
              .street-name {margin-top: 0.2vw; font-weight: bold; color: #333;  }
              @media (max-width: 600px) {
                .image-item_a {flex: 0 0 100%;}
              }
          </style>
          <script>
              const searchInput_a = document.getElementById('searchInput_a');
              const imageItems_a = document.querySelectorAll('.image-item_a');

              searchInput_a.addEventListener('input', function () {
                const query = this.value.trim().toLowerCase();

                imageItems_a.forEach(item => {
                  const street = item.getAttribute('data-street').toLowerCase();
                  if (query === '' || street.includes(query)) {
                    item.style.display = ''; // show
                  } else {
                    item.style.display = 'none'; // hide
                  }
                });
              });
          </script>